#include <stdio.h>
#include <stdlib.h>
#include "LinkDouble.h"

//	带有头节点的双向环链
//  可自定义数据结构




#define LLIST_RFORWAED 1
#define   DATETYPE  int



dounode *dounode_creat(int InitSize) 
{
	dounode *me;
	
	me = malloc(sizeof(*me));
	
	if(me == NULL)
		return NULL;
	
	me->size =InitSize;
	me->head.data = NULL;	
	me->head.next = &me->head;
	me->head.prev = &me->head;
	
	return me;
}


//int dounode_add(dounode *list, int n, DATETYPE *data)
//{
//	int j = 0;
//	dounode *me = list;
//	
//	while (j < n && me != NULL)
//	{
//		me = me->next;
//		j++;
//	}
//	
//	if (me == NULL)
//	{
//		return 0; // 如果n超过链表长度，返回错误
//	}
//	

//	
//	for()
//	{
//		dounode *newnode = malloc(sizeof(*newnode));
//		if (newnode == NULL)
//		{
//			return 0; // 内存分配失败，返回错误
//		}	
//		
//		newnode->data = *data;
//		newnode->next = me->next;
//		newnode->pre = me;	
//		
//		if (me->next != NULL)
//		{
//			me->next->pre = newnode;
//		}
//		
//		me->next = newnode;
//		
//	}

//	
//
//	return 1;
//}





void dounode_show(dounode * list)
{
	dounode *me;
	me->head.next= list->head.next;	
	
	do
	{
		printf("%d",me->head.data);	
		me->head.next= me->head.next;
		
	}while(me->head.next!= list->head.next);
	
}


void double_destory(dounode *list) 		//！！！
{
	struct llist_node_st *me,*next;
	
	for(me =list->head.next; me!= &list->head ;me = next)
	{
		next = me->next;
		free(me->data);	
		free(me);
		
	}
	free(list);
	
}



//链表 位置 数据 方式 1 为头部插入 2 为尾部插入
int dounode_insert( dounode * list,int n, void *data ,int mode)
{
	int j = 0;
	int i = n ;
	//int tem = 0;
	LLIST *me = list ->head.next;
	
	if(mode == 1)
	{
		while(j< i)
		{
			me = me->next ;
			j++;
		}
		
			//find the location
			LLIST *newnode;
		
			newnode = malloc(sizeof(*newnode));	
			
			newnode->next = me->next;
			newnode->prev = me;
			
			me->next = newnode;
			me ->next->prev = newnode;
			
	
//			newnode =malloc(sizeof(*newnode));		
//			me->next->pre = newnode;
//			
//			newnode->next = me->next;
//			
//			me->next = newnode;
//			newnode->pre = me;			
			
			newnode->data = data;

	}
//	else if(mode == 2)
//	{
//		while(j< i)
//		{
//			me = me->prev ;
//			j++;
//		}
//		
//		//find the location
//		LLIST *newnode;
//		
//		newnode = malloc(sizeof(*newnode));	
//		
//		newnode->next = me->next;
//		newnode->prev = me;
//		
//		me->next = newnode;
//		me ->next->prev = newnode;
		
		
//			newnode =malloc(sizeof(*newnode));		
//			me->next->pre = newnode;
//			
//			newnode->next = me->next;
//			
//			me->next = newnode;
//			newnode->pre = me;			
		
	//	newnode->data = data;
		
		
	//}
	

	return 1;
	
}
